# 装饰器就是一个闭包，也是一个函数嵌套
# 特点：
# 1.不修改已有函数的源代码；
# 2.不修改已有函数的调用方式；
# 3.给以后的函数添加额外的功能；

# 定义装饰器
# 如果闭包函数的参数有且只有一个，并且为函数，则叫装饰器
def decorator(func):
    def inner():
        print('添加登录验证')
        func()

    return inner


# 发表评论
# 第二种添加语法糖的方式
@decorator #等价于 comment=decorator(comment)
def comment():
    print("发表评论")

# 需求：
# 1.添加登录验证；
# 2.验证后发表评论
# 3.调用方式不变


# 调用装饰对已有函数装饰
# 现在的comment=inner
# 第一种方式
# comment=decorator(comment)

comment()

# 装饰器的执行时机：当当前模块加载完成以后，装饰器会立即执行，对已有函数进行装饰